0181 prisma orm 리서치
README
이 문서는 프리즈마 ORM을 본격적으로 사용하기에 앞서 인상과 TypeORM과의 차이점을 이해하고 넘어가기 위해 작성되었습니다. 마침 코드팩토리의 백엔드 아카데미 - 한 번에 끝내는 NestJS 패키지 - 기초부터 MSA까지 in Fast campus 강의에서도 해당 내용을 다루기 때문에 좀 더 빠른 "이론"적이고 "패러다임" 위주의 내용을 정리해볼 수 있도록 하면 좋을 것 같습니다.
Introduction
Prisma는 다른 ORM들과 달리 자기만의 언어가 존재한다. 그 언어를 PSL (Prisma Schema Language)라고 부르며, TypeORM이 타입스크립트로 테이블을 "일반화"한 것에 반해 Prisma는 PSL을 기준으로 "구체적인" 코드를 생성해준다는 점이 도드라진 특징이다.
그럼 PSL로 뭘 정의할 수 있느냐? 연결할 DB 커넥션을 위한 정보 datasource
, 실제 코드를 작성해줄 generator
, generator에 클라이언트를 저장해야해서 generator client
, 테이블 정보를 정의하는 model
, FK 컬럼에 릴레이션을 정의하는 애트리뷰트 @relation(fields, references, onDelete, ...)
애트리뷰트! 컬럼에 속성을 부여해준다. 간단히 톺아보았을 때, 다음과 같다:
@id
: PK@default
: 기본값@unique
: unique constraint@relation
: 모델 간 릴레이션@map
: 코드에서 사용하는 프로퍼티와 실제 데이터베이스에 저장될 컬럼을 매핑 (ex:id
to_id
)@updatedAt
: DateTime으로 업데이트시간@@id
: Composite Primary Key -- 주로 중계테이블에서 쓰임@@unique
: Composite Unique Key@@index
: Index Keys
Prisma는 코드를 직접 생성해주기 때문에 스키마 변경이 이루어지면 CLI 명령어 prisma generate
를 매번 해주어야 한다. generate된 결과물은 신기하게도 node_modules
안에 들어간다!